package com.gitlab.bootren.data.core.query;

import com.gitlab.bootren.data.core.query.restriction.RestrictionType;

import java.util.Map;

/**
 * *
 *
 * 查询条件模型
 *
 * @author tengda
 *
 */
public interface ICondition extends java.io.Serializable{

    /**
     * 设置查询参数
     *
     * @param paramName
     * @param object
     * @return
     */
    ICondition setParam(String paramName, Object object);

    /**
     * and 连接条件
     *
     * @param conditionModel
     * @return
     */
    ICondition and(ICondition conditionModel);
    
    ICondition and(String key,Object value);
    
    ICondition and(String key,Object value,RestrictionType restrictionType);
    
    ICondition and(String jpql);

    /**
     * or连接条件
     *
     * @param conditionModel
     * @return
     */
    ICondition or(ICondition conditionModel);
    
    ICondition or(String key,Object value);
    
    ICondition or(String key,Object value,RestrictionType restrictionType);
    
    ICondition or(String jpql);


    /**
     * 设置所有参数
     *
     * @param params
     * @return
     */
    ICondition setParams(Map<String, Object> params);

    /**
     * 获取所有参数
     *
     * @return
     */
    Map<String, Object> getParams();

    /**
     * 转换为查询语言
     *
     * @return
     */
    String toQl();

    /**
     * 转换为查询语言
     *
     * @param aliasName 主表的别名
     * @return
     */
    String toQl(String aliasName);


}
